package com.lx.spring.book.service.impl;

import com.lx.spring.book.dao.BookDAO;
import com.lx.spring.book.service.itf.BookService;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.inject.Inject;


/**
 * AutowiredAnnotationBeanPostProcessor 执行依赖注入
 */

@Service
public class BookServiceImpl implements BookService {

//    @Qualifier("bookDAO")// 根据bean 的 id 装配 而不是使用属性名
//    @Autowired // 可以使用的范围包括: 构造器 方法 参数 属性 注解
    // 如果组件只有一个有参构造器,这个有参构造器的 @Autowired可以省略,参数位置的组件还是可以从容器中获取
//    @Resource(name= "bookDAO") // 根据bean Name注入 来自jsr250 规范,可以实现autowire 自动注入,但是不能实现 @primary 和 Autowired 的 required = false
    @Inject // 同之前的注解效果,且 自带附加的 @Primary 效果
    private BookDAO bookDAO;

    @Override
    public String toString() {
        return new ToStringBuilder(this)
                .append("bookDAO", bookDAO)
                .toString();
    }
}
